package com.boge.ai.rag;

import com.boge.ai.entity.rag.FaqItem;
import com.boge.ai.utils.LLMUtils;
import com.boge.ai.utils.RedisOperationUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 通过Redis数据库实现 文件检索的方式来实现 RAG的完整流程
 */
public class Demo04 {
    public static void main(String[] args) throws Exception {
        String prompt = "没精神";
        // 和Redis匹配关联的信息
        RedisOperationUtils utils = new RedisOperationUtils();
        List<FaqItem> faqItems = utils.searchInstructionByKeyword(prompt, 3);
        String result = faqItems.stream()
                .map(item -> "Q: " + item.getInstruction() + "\n A: " + item.getOutput())
                .collect(Collectors.joining(" \n"));
        // 原始的问题 和 新的 提示信息组合起来
        prompt = String.format("""
                # 角色
                你是一个问答机器人。
                你的任务是根据下述给定的已知信息回答用户问题。
                根据已知信息的内容推理给出用户问题的解决方案
                确保你的回复完全依据下述已知信息。不要编造答案。
                如果下述已知信息不足以回答用户的问题，请直接回复"我无法回答您的问题"。
                
                已知信息:
                %s
                
                用户问题：
                %s
                
                请用中文回答用户问题。
                """, result, prompt);
        String completion = LLMUtils.completion(prompt, null);
        System.out.println(completion);
    }
}
